package br.com.sgc.entities.cep;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

import org.hibernate.annotations.Index;


@Entity
@Table(name="cidades", schema="cep")
public class Cidade implements Serializable{

	private static final long serialVersionUID = -7659026822803139844L;
	
	@Id
	@Column(name="cd_cidade")
	@SequenceGenerator(sequenceName="cep.seq_cidades", name="SEQCIDADES", allocationSize=1)
	@GeneratedValue(strategy=GenerationType.SEQUENCE,  generator="SEQCIDADES")
	private Integer id;
	
	@Column(name="ds_cidade_nome")
	private String descricao;
	
	@ManyToOne @JoinColumn(name="cd_uf")
	@Index(name="cidade_uf_i1")
	private UF uf = new UF();
	
	@OneToMany(mappedBy="cidade", fetch=FetchType.LAZY)
	private List<Bairro> bairros = new ArrayList<Bairro>();
	
	public Cidade() {
		// TODO Auto-generated constructor stub
	}
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getDescricao() {
		return descricao;
	}
	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}
	public UF getUf() {
		return uf;
	}
	public void setUf(UF uf) {
		this.uf = uf;
	}
	public List<Bairro> getBairros() {
		return bairros;
	}
	public void setBairros(List<Bairro> bairros) {
		this.bairros = bairros;
	}
	
	@Override
	public int hashCode() {
		if(getId() != null){
			return getId().hashCode();
		}
		return 0;
	}
	
	@Override
	public boolean equals(Object obj) {
		if (obj == null || !(obj instanceof Cidade)) {
			return false;
		}
		return ((Cidade)obj).getId().equals(getId());
	}
	
}
